package Zoomanagement;

/**
 * ZooAPI Interface - Defines the contract for managing a zoo's animal collection.
 * @author ashongtical
 */
public interface ZooAPI {
    /**
     * Adds an animal to the zoo.
     * @param animal The animal to add.
     */
    void addAnimal(Animal animal);

    /**
     * Deletes an animal from the zoo by name.
     * @param name The name of the animal to delete.
     */
    void deleteAnimal(String name);

    /**
     * Finds an animal in the zoo by name.
     * @param name The name of the animal to find.
     * @return The index of the animal in the collection, or -1 if not found.
     */
    int findAnimal(String name);

    /**
     * Moves an animal to another zoo with logistics details.
     * @param name The name of the animal to move.
     * @param destination The destination zoo.
     * @param logistics The logistics details for the move.
     */
    void moveAnimal(String name, Zoo destination, Logistics logistics);

    /**
     * Displays all animals in the zoo.
     */
    void displayAnimals();

    /**
     * Gets the name of the zoo.
     * @return The name of the zoo.
     */
    String getName();

    /**
     * Gets the number of animals in the zoo.
     * @return The count of animals.
     */
    int getCounter();

    /**
     * Gets an animal at a specific index.
     * @param index The index of the animal.
     * @return The animal at the index, or null if invalid.
     */
    Animal getAnimal(int index);
}